Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Biogeography-based optimization</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Biogeography-based_optimization"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.math.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Biogeography-based_optimization rootpage-Biogeography-based_optimization skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Biogeography-based optimization</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><p><b>Biogeography-based optimization</b> (<b>BBO</b>) is an <a href="Evolutionary_algorithm" title="Evolutionary algorithm">evolutionary algorithm</a> (EA) that <a href="Optimization" class="mw-redirect" title="Optimization">optimizes</a> a <a href="Function_(mathematics)" title="Function (mathematics)">function</a> by <a href="Stochastic" title="Stochastic">stochastically</a> and <a href="Iterative_method" title="Iterative method">iteratively</a> improving <a href="Candidate_solution" class="mw-redirect" title="Candidate solution">candidate solutions</a> with regard to a given measure of quality, or <a href="Fitness_function" title="Fitness function">fitness function</a>. BBO belongs to the class of <a href="Metaheuristic" title="Metaheuristic">metaheuristics</a> since it includes many variations, and since it does not make any assumptions about the problem and can therefore be applied to a wide class of problems.
</p><p>BBO is typically used to optimize multidimensional real-valued functions, but it does not use the <a href="Gradient" title="Gradient">gradient</a> of the function, which means that it does not require the function to be <a href="Differentiable_function" title="Differentiable function">differentiable</a> as required by classic optimization methods such as <a href="Gradient_descent" title="Gradient descent">gradient descent</a> and <a href="Quasi-newton_methods" class="mw-redirect" title="Quasi-newton methods">quasi-newton methods</a>. BBO can therefore be used on <a href="Continuous_function" title="Continuous function">discontinuous functions</a>.
</p><p>BBO optimizes a problem by maintaining a population of candidate solutions, and creating new candidate solutions by combining existing ones according to a simple formula. In this way the <a href="Loss_function" title="Loss function">objective function</a> is treated as a black box that merely provides a measure of quality given a candidate solution, and the function's gradient is not needed.
</p><p>Like many EAs, BBO was motivated by a natural process; in particular, BBO was motivated by <a href="Biogeography" title="Biogeography">biogeography</a>, which is the study of the distribution of biological species through time and space.<sup id="cite_ref-Quammen1997_1-0" class="reference"><a href="#cite_note-Quammen1997-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> BBO was originally introduced by <a rel="nofollow" class="external text" href="http://academic.csuohio.edu/simond/">Dan Simon</a> in 2008.<sup id="cite_ref-Simon2008_2-0" class="reference"><a href="#cite_note-Simon2008-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Underlying_principles">Underlying principles</h2></div>
<p>Mathematical models of <a href="Biogeography" title="Biogeography">biogeography</a> describe <a href="Speciation" title="Speciation">speciation</a> (the evolution of new <a href="Species" title="Species">species</a>), the <a href="Animal_migration" title="Animal migration">migration</a> of species (animals, fish, birds, or insects) between islands, and the <a href="Extinction" title="Extinction">extinction</a> of species.<sup id="cite_ref-MacArthur1967_3-0" class="reference"><a href="#cite_note-MacArthur1967-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> Islands that are friendly to life are said to have a high habitat suitability index (HSI).<sup id="cite_ref-Wesche1987_4-0" class="reference"><a href="#cite_note-Wesche1987-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> Features that correlate with HSI include rainfall, vegetative diversity, topographic diversity, land area, temperature, and others. The features that determine are called suitability index variables (SIVs). In terms of habitability, SIVs are the independent variables and HSI is the dependent variable.
</p><p>Islands with a high HSI can support many species, and islands with a low HSI can support only a few species. Islands with a high HSI have many species that <a href="Emigration" title="Emigration">emigrate</a> to nearby habitats because of the large populations and the large numbers of species that they host. Note that emigration from an island with a high HSI does not occur because species <i>want</i> to leave their home; after all, their home island is an attractive place to live. Emigration occurs because of the accumulation of random effects on a large number of species with large populations. Emigration occurs as animals ride <a href="Flotsam" class="mw-redirect" title="Flotsam">flotsam</a>, swim, fly, or ride the wind to neighboring islands. When a species emigrates from an island, it does not mean that the species completely disappears from its original island; only a few representatives emigrate, so an emigrating species remains present on its original island while at the same time migrating to a neighboring island. However, in BBO it is assumed that emigration from an island results in extinction from that island. This assumption is necessary in BBO because species represent the independent variables of a function, and each island represents a candidate solution to a function optimization problem.
</p><p>Islands with a high HSI not only have a high emigration rate, but they also have a low immigration rate because they already support many species. Species that migrate to such islands will tend to die in spite of the island's high HSI, because there is too much competition for resources from other species.
</p><p>Islands with a low HSI have a high immigration rate because of their low populations. Again, this is not because species <i>want</i> to immigrate to such islands; after all, these islands are undesirable places to live. The reason that immigration occurs to these islands is because there is a lot of room for additional species. Whether or not the immigrating species can survive in its new home, and for how long, is another question. However, <a href="Species_diversity" title="Species diversity">species diversity</a> is correlated with HSI, so when more species arrive at a low HSI island, the island's HSI will tend to increase.<sup id="cite_ref-Wesche1987_4-1" class="reference"><a href="#cite_note-Wesche1987-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p><p>The figure on the right illustrates an island migration model.<sup id="cite_ref-MacArthur1967_3-1" class="reference"><a href="#cite_note-MacArthur1967-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> The immigration rate <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \lambda }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>λ<!-- λ --></mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \lambda }</annotation>
</semantics>
</math></span><img src="./b43d0ea3c9c025af1be9128e62a18fa74bedda2a.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.355ex; height:2.176ex;" alt="{\displaystyle \lambda }" loading="lazy"></span> and the emigration rate <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mu }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>μ<!-- μ --></mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mu }</annotation>
</semantics>
</math></span><img src="./9fd47b2a39f7a7856952afec1f1db72c67af6161.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:1.402ex; height:2.176ex;" alt="{\displaystyle \mu }" loading="lazy"></span> are functions of the number of species on the island. The maximum possible immigration rate <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle I}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>I</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle I}</annotation>
</semantics>
</math></span><img src="./535ea7fc4134a31cbe2251d9d3511374bc41be9f.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.172ex; height:2.176ex;" alt="{\displaystyle I}" loading="lazy"></span> occurs when there are zero species on the island. As the number of species increases, the island becomes more crowded, fewer species are able to survive immigration, and the immigration rate decreases. The largest possible number of species that the habitat can support is <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle S_{\max }}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>S</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo movablelimits="true" form="prefix">max</mo>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle S_{\max }}</annotation>
</semantics>
</math></span><img src="./32eb3f46d17f063513ef1d0bf55ba85bdef51f06.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:4.716ex; height:2.509ex;" alt="{\displaystyle S_{\max }}" loading="lazy"></span>, at which point the immigration rate is zero. If there are no species on the island, then the emigration rate is zero. As the number of species on the island increases, it becomes more crowded, more species representatives are able to leave the island, and the emigration rate increases. When the island contains the largest number of possible species <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle S_{\max }}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>S</mi>
<mrow class="MJX-TeXAtom-ORD">
<mo movablelimits="true" form="prefix">max</mo>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle S_{\max }}</annotation>
</semantics>
</math></span><img src="./32eb3f46d17f063513ef1d0bf55ba85bdef51f06.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:4.716ex; height:2.509ex;" alt="{\displaystyle S_{\max }}" loading="lazy"></span>, the emigration rate reaches its maximum possible value <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle E}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>E</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle E}</annotation>
</semantics>
</math></span><img src="./4232c9de2ee3eec0a9c0a19b15ab92daa6223f9b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.776ex; height:2.176ex;" alt="{\displaystyle E}" loading="lazy"></span>.
</p>

<p>In BBO, <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \lambda _{k}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>λ<!-- λ --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \lambda _{k}}</annotation>
</semantics>
</math></span><img src="./57dfa9eb1c96d16ff53f264bd9710a16c0108469.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.444ex; height:2.509ex;" alt="{\displaystyle \lambda _{k}}" loading="lazy"></span> is the probability that a given independent variable in the <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle k}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>k</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle k}</annotation>
</semantics>
</math></span><img src="./c3c9a2c7b599b37105512c5d570edc034056dd40.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.211ex; height:2.176ex;" alt="{\displaystyle k}" loading="lazy"></span>-th candidate solution will be replaced; that is, <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \lambda _{k}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>λ<!-- λ --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \lambda _{k}}</annotation>
</semantics>
</math></span><img src="./57dfa9eb1c96d16ff53f264bd9710a16c0108469.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.444ex; height:2.509ex;" alt="{\displaystyle \lambda _{k}}" loading="lazy"></span> is the immigration probability of <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle x_{k}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle x_{k}}</annotation>
</semantics>
</math></span><img src="./6d2b88c64c76a03611549fb9b4cf4ed060b56002.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.418ex; height:2.009ex;" alt="{\displaystyle x_{k}}" loading="lazy"></span>. If an independent variable is to be replaced, then the emigrating candidate solution is chosen with a probability that is proportional to the emigration probability <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mu _{k}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>μ<!-- μ --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mu _{k}}</annotation>
</semantics>
</math></span><img src="./25f9c464114cfcd7e31e53de202703377b7c5ffb.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:2.49ex; height:2.176ex;" alt="{\displaystyle \mu _{k}}" loading="lazy"></span>. This is usually performed using <a href="Fitness_proportionate_selection" title="Fitness proportionate selection">roulette wheel selection</a>.
</p>
<dl><dd><dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\text{Prob}}(x_{j}){\text{ is selected for emigration}}={\frac {\mu _{j}}{\sum _{i=1}^{N}\mu _{i}}}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mtext>Prob</mtext>
</mrow>
<mo stretchy="false">(</mo>
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>j</mi>
</mrow>
</msub>
<mo stretchy="false">)</mo>
<mrow class="MJX-TeXAtom-ORD">
<mtext>&nbsp;is selected for emigration</mtext>
</mrow>
<mo>=</mo>
<mrow class="MJX-TeXAtom-ORD">
<mfrac>
<msub>
<mi>μ<!-- μ --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>j</mi>
</mrow>
</msub>
<mrow>
<munderover>
<mo>∑<!-- ∑ --></mo>
<mrow class="MJX-TeXAtom-ORD">
<mi>i</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi>N</mi>
</mrow>
</munderover>
<msub>
<mi>μ<!-- μ --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>i</mi>
</mrow>
</msub>
</mrow>
</mfrac>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle {\text{Prob}}(x_{j}){\text{ is selected for emigration}}={\frac {\mu _{j}}{\sum _{i=1}^{N}\mu _{i}}}}</annotation>
</semantics>
</math></span><img src="./dad0c5791ecc0d536a81ea33b6f9b687db3563bb.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -3.171ex; width:46.295ex; height:6.343ex;" alt="{\displaystyle {\text{Prob}}(x_{j}){\text{ is selected for emigration}}={\frac {\mu _{j}}{\sum _{i=1}^{N}\mu _{i}}}}" loading="lazy"></span></dd></dl></dd></dl>
<p>for <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle j=1,\cdots ,N}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>j</mi>
<mo>=</mo>
<mn>1</mn>
<mo>,</mo>
<mo>⋯<!-- ⋯ --></mo>
<mo>,</mo>
<mi>N</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle j=1,\cdots ,N}</annotation>
</semantics>
</math></span><img src="./c313f0babbed55da8a662c030de66cca221175a2.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; margin-left: -0.027ex; width:12.488ex; height:2.509ex;" alt="{\displaystyle j=1,\cdots ,N}" loading="lazy"></span>, where <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle N}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>N</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle N}</annotation>
</semantics>
</math></span><img src="./f5e3890c981ae85503089652feb48b191b57aae3.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.064ex; height:2.176ex;" alt="{\displaystyle N}" loading="lazy"></span> is the number of candidate solutions in the population.
</p>
<div class="mw-heading mw-heading2"><h2 id="Algorithm">Algorithm</h2></div>
<p>Like most other EAs, BBO includes <a href="Mutation_(genetic_algorithm)" class="mw-redirect" title="Mutation (genetic algorithm)">mutation</a>. A basic BBO algorithm with a population size of <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle N}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>N</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle N}</annotation>
</semantics>
</math></span><img src="./f5e3890c981ae85503089652feb48b191b57aae3.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.064ex; height:2.176ex;" alt="{\displaystyle N}" loading="lazy"></span> for optimizing an <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>n</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle n}</annotation>
</semantics>
</math></span><img src="./a601995d55609f2d9f5e233e36fbe9ea26011b3b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.395ex; height:1.676ex;" alt="{\displaystyle n}" loading="lazy"></span>-dimensional function can be described as follows.
</p>
<pre>Initialize a population of <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle N}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>N</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle N}</annotation>
</semantics>
</math></span><img src="./f5e3890c981ae85503089652feb48b191b57aae3.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.064ex; height:2.176ex;" alt="{\displaystyle N}" loading="lazy"></span> candidate solutions <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \{x_{k}\}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo fence="false" stretchy="false">{</mo>
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo fence="false" stretchy="false">}</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \{x_{k}\}}</annotation>
</semantics>
</math></span><img src="./da303cc40bcf961218a8415e24719e51f30c224e.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.743ex; height:2.843ex;" alt="{\displaystyle \{x_{k}\}}" loading="lazy"></span>
<b>While not</b>(termination criterion)
<b>For each</b> <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle x_{k}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle x_{k}}</annotation>
</semantics>
</math></span><img src="./6d2b88c64c76a03611549fb9b4cf4ed060b56002.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.418ex; height:2.009ex;" alt="{\displaystyle x_{k}}" loading="lazy"></span>, set emigration probability <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mu _{k}\propto }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>μ<!-- μ --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo>∝<!-- ∝ --></mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mu _{k}\propto }</annotation>
</semantics>
</math></span><img src="./4519339427aff2dd2a67173911dbf38d52e08835.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.944ex; height:2.176ex;" alt="{\displaystyle \mu _{k}\propto }" loading="lazy"></span> fitness of <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle x_{k}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle x_{k}}</annotation>
</semantics>
</math></span><img src="./6d2b88c64c76a03611549fb9b4cf4ed060b56002.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.418ex; height:2.009ex;" alt="{\displaystyle x_{k}}" loading="lazy"></span>, <b>do</b>
with <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mu _{k}\in [0,1]}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>μ<!-- μ --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo>∈<!-- ∈ --></mo>
<mo stretchy="false">[</mo>
<mn>0</mn>
<mo>,</mo>
<mn>1</mn>
<mo stretchy="false">]</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mu _{k}\in [0,1]}</annotation>
</semantics>
</math></span><img src="./6d02276410f1d3161d652d200e1d831baf760105.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:9.984ex; height:2.843ex;" alt="{\displaystyle \mu _{k}\in [0,1]}" loading="lazy"></span>
<b>For each</b> <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle x_{k}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle x_{k}}</annotation>
</semantics>
</math></span><img src="./6d2b88c64c76a03611549fb9b4cf4ed060b56002.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.418ex; height:2.009ex;" alt="{\displaystyle x_{k}}" loading="lazy"></span>, set immigration probability <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \lambda _{k}=1-\mu _{k}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>λ<!-- λ --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo>=</mo>
<mn>1</mn>
<mo>−<!-- − --></mo>
<msub>
<mi>μ<!-- μ --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \lambda _{k}=1-\mu _{k}}</annotation>
</semantics>
</math></span><img src="./b76c3e98480817e394a04fd02c5a8401d6797a19.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:12.036ex; height:2.676ex;" alt="{\displaystyle \lambda _{k}=1-\mu _{k}}" loading="lazy"></span> <b>do</b>
<span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \{z_{k}\}\leftarrow \{x_{k}\}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo fence="false" stretchy="false">{</mo>
<msub>
<mi>z</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo fence="false" stretchy="false">}</mo>
<mo stretchy="false">←<!-- ← --></mo>
<mo fence="false" stretchy="false">{</mo>
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo fence="false" stretchy="false">}</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \{z_{k}\}\leftarrow \{x_{k}\}}</annotation>
</semantics>
</math></span><img src="./cb94fcc4a5c3da0b7af121f8cd61a43ad4097f47.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:12.852ex; height:2.843ex;" alt="{\displaystyle \{z_{k}\}\leftarrow \{x_{k}\}}" loading="lazy"></span>
<b>For each</b> individual <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z_{k}(k=1,\cdots ,N)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>z</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo>=</mo>
<mn>1</mn>
<mo>,</mo>
<mo>⋯<!-- ⋯ --></mo>
<mo>,</mo>
<mi>N</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z_{k}(k=1,\cdots ,N)}</annotation>
</semantics>
</math></span><img src="./31b36e71ac39b2805f8a52793d01f3b9f1b88fb1.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:16.693ex; height:2.843ex;" alt="{\displaystyle z_{k}(k=1,\cdots ,N)}" loading="lazy"></span> <b>do</b>
<b>For each</b> independent variable index <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle s\in [1,n]}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>s</mi>
<mo>∈<!-- ∈ --></mo>
<mo stretchy="false">[</mo>
<mn>1</mn>
<mo>,</mo>
<mi>n</mi>
<mo stretchy="false">]</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle s\in [1,n]}</annotation>
</semantics>
</math></span><img src="./204fce467241a7677c583a9510c1bd47d07158ac.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:8.816ex; height:2.843ex;" alt="{\displaystyle s\in [1,n]}" loading="lazy"></span> <b>do</b>
Use <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \lambda _{k}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>λ<!-- λ --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \lambda _{k}}</annotation>
</semantics>
</math></span><img src="./57dfa9eb1c96d16ff53f264bd9710a16c0108469.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.444ex; height:2.509ex;" alt="{\displaystyle \lambda _{k}}" loading="lazy"></span> to probabilistically decide whether to immigrate to <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z_{k}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>z</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z_{k}}</annotation>
</semantics>
</math></span><img src="./a51cdfac24f8b95ed711f11ea9502da4087b6a24.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.17ex; height:2.009ex;" alt="{\displaystyle z_{k}}" loading="lazy"></span>
<b>If</b> immigrating <b>then</b>
Use <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \{\mu _{i}\}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo fence="false" stretchy="false">{</mo>
<msub>
<mi>μ<!-- μ --></mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>i</mi>
</mrow>
</msub>
<mo fence="false" stretchy="false">}</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \{\mu _{i}\}}</annotation>
</semantics>
</math></span><img src="./090a6af4a19ec7631786786b38919dad6a169f2d.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.526ex; height:2.843ex;" alt="{\displaystyle \{\mu _{i}\}}" loading="lazy"></span> to probabilistically select the emigrating individual <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle x_{j}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>j</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle x_{j}}</annotation>
</semantics>
</math></span><img src="./5db47cb3d2f9496205a17a6856c91c1d3d363ccd.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:2.239ex; height:2.343ex;" alt="{\displaystyle x_{j}}" loading="lazy"></span>
<span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z_{k}(s)\leftarrow x_{j}(s)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>z</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo stretchy="false">←<!-- ← --></mo>
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>j</mi>
</mrow>
</msub>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z_{k}(s)\leftarrow x_{j}(s)}</annotation>
</semantics>
</math></span><img src="./75d7725beaf5c2ebe30e2a13415c8f8d6834170d.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:13.823ex; height:3.009ex;" alt="{\displaystyle z_{k}(s)\leftarrow x_{j}(s)}" loading="lazy"></span>
<b>End if</b>
Next independent variable index: <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle s\leftarrow s+1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>s</mi>
<mo stretchy="false">←<!-- ← --></mo>
<mi>s</mi>
<mo>+</mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle s\leftarrow s+1}</annotation>
</semantics>
</math></span><img src="./7cd3a998628563f1260d40cc2b412f931eb4a0c3.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.505ex; width:9.798ex; height:2.343ex;" alt="{\displaystyle s\leftarrow s+1}" loading="lazy"></span>
Probabilistically mutate <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z_{k}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>z</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z_{k}}</annotation>
</semantics>
</math></span><img src="./a51cdfac24f8b95ed711f11ea9502da4087b6a24.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.17ex; height:2.009ex;" alt="{\displaystyle z_{k}}" loading="lazy"></span>
Next individual: <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle k\leftarrow k+1}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>k</mi>
<mo stretchy="false">←<!-- ← --></mo>
<mi>k</mi>
<mo>+</mo>
<mn>1</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle k\leftarrow k+1}</annotation>
</semantics>
</math></span><img src="./469b0d14d5eff3c19bde9957713c939411776b66.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.505ex; width:10.039ex; height:2.343ex;" alt="{\displaystyle k\leftarrow k+1}" loading="lazy"></span>
<span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \{x_{k}\}\leftarrow \{z_{k}\}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo fence="false" stretchy="false">{</mo>
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo fence="false" stretchy="false">}</mo>
<mo stretchy="false">←<!-- ← --></mo>
<mo fence="false" stretchy="false">{</mo>
<msub>
<mi>z</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo fence="false" stretchy="false">}</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \{x_{k}\}\leftarrow \{z_{k}\}}</annotation>
</semantics>
</math></span><img src="./4adb09a80330f7ad2d8251c147f175408613aa2a.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:12.852ex; height:2.843ex;" alt="{\displaystyle \{x_{k}\}\leftarrow \{z_{k}\}}" loading="lazy"></span>
Next generation
</pre>
<div class="mw-heading mw-heading2"><h2 id="Discussion_of_the_BBO_algorithm">Discussion of the BBO algorithm</h2></div>
<ul><li>The population size <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle N}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>N</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle N}</annotation>
</semantics>
</math></span><img src="./f5e3890c981ae85503089652feb48b191b57aae3.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.064ex; height:2.176ex;" alt="{\displaystyle N}" loading="lazy"></span> is a tuning parameter. If <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle N}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>N</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle N}</annotation>
</semantics>
</math></span><img src="./f5e3890c981ae85503089652feb48b191b57aae3.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.064ex; height:2.176ex;" alt="{\displaystyle N}" loading="lazy"></span> is too small or too large, then the optimization performance of BBO will suffer. Typical implementations of BBO use a value of <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle N}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>N</mi>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle N}</annotation>
</semantics>
</math></span><img src="./f5e3890c981ae85503089652feb48b191b57aae3.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.064ex; height:2.176ex;" alt="{\displaystyle N}" loading="lazy"></span> somewhere between 20 and 200.</li>
<li>The initial population of candidate solutions <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \{x_{k}\}_{k=1}^{N}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo fence="false" stretchy="false">{</mo>
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<msubsup>
<mo fence="false" stretchy="false">}</mo>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow class="MJX-TeXAtom-ORD">
<mi>N</mi>
</mrow>
</msubsup>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \{x_{k}\}_{k=1}^{N}}</annotation>
</semantics>
</math></span><img src="./1a88807fddedb9e504c200595ba606364c8f3677.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:7.933ex; height:3.176ex;" alt="{\displaystyle \{x_{k}\}_{k=1}^{N}}" loading="lazy"></span> is usually generated randomly. However, it could be generated in a problem-dependent way based on some reasonable guesses or previously-known good solutions to the optimization problem.</li>
<li>The termination criterion is problem-dependent, like in any other EA. In most applications the termination criterion is a generation count limit or a function evaluation limit (that is, how often the objective function is evaluated).</li>
<li><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \{z_{k}\}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo fence="false" stretchy="false">{</mo>
<msub>
<mi>z</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo fence="false" stretchy="false">}</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \{z_{k}\}}</annotation>
</semantics>
</math></span><img src="./f6ea18732a3b055214cf076f95a61a5cca862946.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.495ex; height:2.843ex;" alt="{\displaystyle \{z_{k}\}}" loading="lazy"></span> is a temporary population so that all emigrating variables can originate from the population that is in place at the beginning of the generation, which is <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \{x_{k}\}}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mo fence="false" stretchy="false">{</mo>
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo fence="false" stretchy="false">}</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \{x_{k}\}}</annotation>
</semantics>
</math></span><img src="./da303cc40bcf961218a8415e24719e51f30c224e.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.743ex; height:2.843ex;" alt="{\displaystyle \{x_{k}\}}" loading="lazy"></span>.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Algorithmic_variations">Algorithmic variations</h2></div>
<p>Many variations have been proposed to the basic BBO algorithm, among which are the following.
</p>
<ul><li>Elitism is implemented in most EAs to make sure that the best candidate solution is not lost from one generation to the next. This can be implemented in a variety of ways, but one common way is to save the best candidate solutions at the beginning of each generation in a set <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathbb {E} }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="double-struck">E</mi>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathbb {E} }</annotation>
</semantics>
</math></span><img src="./ad9faf1fd4a61d36d7f8a2f3204f3805a43c0d4a.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.55ex; height:2.176ex;" alt="{\displaystyle \mathbb {E} }" loading="lazy"></span>; then replace the worst candidate solutions with <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathbb {E} }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="double-struck">E</mi>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathbb {E} }</annotation>
</semantics>
</math></span><img src="./ad9faf1fd4a61d36d7f8a2f3204f3805a43c0d4a.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.55ex; height:2.176ex;" alt="{\displaystyle \mathbb {E} }" loading="lazy"></span> at the end of the generation, after migration and mutation have completed. The size of <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathbb {E} }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="double-struck">E</mi>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathbb {E} }</annotation>
</semantics>
</math></span><img src="./ad9faf1fd4a61d36d7f8a2f3204f3805a43c0d4a.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.55ex; height:2.176ex;" alt="{\displaystyle \mathbb {E} }" loading="lazy"></span> is a tuning parameter, but <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \mathbb {E} }">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mrow class="MJX-TeXAtom-ORD">
<mi mathvariant="double-struck">E</mi>
</mrow>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \mathbb {E} }</annotation>
</semantics>
</math></span><img src="./ad9faf1fd4a61d36d7f8a2f3204f3805a43c0d4a.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:1.55ex; height:2.176ex;" alt="{\displaystyle \mathbb {E} }" loading="lazy"></span> typically includes the best two individuals. Elitism was originally proposed for <a href="Genetic_algorithm" title="Genetic algorithm">genetic algorithms</a> by DeJong.<sup id="cite_ref-DeJong1975_5-0" class="reference"><a href="#cite_note-DeJong1975-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> Elitism can make a significant difference in the performance of BBO, and is highly recommended.</li>
<li>Duplicate replacement is often implemented in BBO. This is a procedure at the end of each generation that replaces duplicate individuals in the population. Scanning for duplicates can be computationally intensive because it is an <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(N^{2})}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>O</mi>
<mo stretchy="false">(</mo>
<msup>
<mi>N</mi>
<mrow class="MJX-TeXAtom-ORD">
<mn>2</mn>
</mrow>
</msup>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle O(N^{2})}</annotation>
</semantics>
</math></span><img src="./e5d43a3df904fa4d7220f5b86285298aa36d969b.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:6.76ex; height:3.176ex;" alt="{\displaystyle O(N^{2})}" loading="lazy"></span> operation, so it is often performed only every few generations, rather than every generation.</li>
<li>Blending can be implemented in BBO. With blending, instead of replacing <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z_{k}(s)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>z</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z_{k}(s)}</annotation>
</semantics>
</math></span><img src="./68435002c07ec12e541eaeecc51bf2fd3e75414f.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:5.07ex; height:2.843ex;" alt="{\displaystyle z_{k}(s)}" loading="lazy"></span> in an immigrating candidate solution with <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle x_{j}(s)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>j</mi>
</mrow>
</msub>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle x_{j}(s)}</annotation>
</semantics>
</math></span><img src="./fab037cb35b83f4c9e814869a54003a72952894a.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:5.139ex; height:3.009ex;" alt="{\displaystyle x_{j}(s)}" loading="lazy"></span> from the emigrating candidate solution, <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z_{k}(s)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>z</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z_{k}(s)}</annotation>
</semantics>
</math></span><img src="./68435002c07ec12e541eaeecc51bf2fd3e75414f.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:5.07ex; height:2.843ex;" alt="{\displaystyle z_{k}(s)}" loading="lazy"></span> is set equal to a linear combination of its original value and <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle x_{j}(s)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>j</mi>
</mrow>
</msub>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle x_{j}(s)}</annotation>
</semantics>
</math></span><img src="./fab037cb35b83f4c9e814869a54003a72952894a.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:5.139ex; height:3.009ex;" alt="{\displaystyle x_{j}(s)}" loading="lazy"></span>:</li></ul>
<dl><dd><dl><dd><span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z_{k}(s)\leftarrow \alpha z_{k}(s)+(1-\alpha )x_{j}(s)}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<msub>
<mi>z</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo stretchy="false">←<!-- ← --></mo>
<mi>α<!-- α --></mi>
<msub>
<mi>z</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>k</mi>
</mrow>
</msub>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo>−<!-- − --></mo>
<mi>α<!-- α --></mi>
<mo stretchy="false">)</mo>
<msub>
<mi>x</mi>
<mrow class="MJX-TeXAtom-ORD">
<mi>j</mi>
</mrow>
</msub>
<mo stretchy="false">(</mo>
<mi>s</mi>
<mo stretchy="false">)</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle z_{k}(s)\leftarrow \alpha z_{k}(s)+(1-\alpha )x_{j}(s)}</annotation>
</semantics>
</math></span><img src="./2d40c0dd05d3af4be99dba85ce52626e2c33e689.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:30.52ex; height:3.009ex;" alt="{\displaystyle z_{k}(s)\leftarrow \alpha z_{k}(s)+(1-\alpha )x_{j}(s)}" loading="lazy"></span></dd></dl></dd>
<dd>where <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \alpha \in [0,1]}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>α<!-- α --></mi>
<mo>∈<!-- ∈ --></mo>
<mo stretchy="false">[</mo>
<mn>0</mn>
<mo>,</mo>
<mn>1</mn>
<mo stretchy="false">]</mo>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \alpha \in [0,1]}</annotation>
</semantics>
</math></span><img src="./daf3c62599ea71319c85f715c9e590d2bab2d036.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:8.981ex; height:2.843ex;" alt="{\displaystyle \alpha \in [0,1]}" loading="lazy"></span>, and <span class="mwe-math-element mwe-math-element-inline"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \alpha =0}">
<semantics>
<mrow class="MJX-TeXAtom-ORD">
<mstyle displaystyle="true" scriptlevel="0">
<mi>α<!-- α --></mi>
<mo>=</mo>
<mn>0</mn>
</mstyle>
</mrow>
<annotation encoding="application/x-tex">{\displaystyle \alpha =0}</annotation>
</semantics>
</math></span><img src="./30cc00f65bbc630448311dd2dc82e7ce5e90985a.svg" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:5.749ex; height:2.176ex;" alt="{\displaystyle \alpha =0}" loading="lazy"></span> corresponds to standard migration as shown in the algorithm above. Blended BBO is based on blended crossover in genetic algorithms,<sup id="cite_ref-Muhlenbein1993_6-0" class="reference"><a href="#cite_note-Muhlenbein1993-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> and has been shown to outperform standard BBO.<sup id="cite_ref-Ma2011b_7-0" class="reference"><a href="#cite_note-Ma2011b-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup></dd></dl>
<ul><li>The BBO algorithm presented above is called partial immigration-based BBO because the immigrating candidate solution is selected before the emigrating candidate solution is selected, and migration for each independent variable in the immigrating candidate solution is performed independently of all other independent variables. Other approaches for selecting the immigrating and emigrating candidate solutions have also been proposed.<sup id="cite_ref-Simon2013_8-0" class="reference"><a href="#cite_note-Simon2013-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Kundra2010_9-0" class="reference"><a href="#cite_note-Kundra2010-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup></li>
<li>The migration curves in the above figure are linear, but nonlinear migration curves often give better performance.<sup id="cite_ref-Ma2010_10-0" class="reference"><a href="#cite_note-Ma2010-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Hybridization">Hybridization</h2></div>
<ul><li>BBO has been hybridized with several other EAs, including <a href="Particle_swarm_optimization" title="Particle swarm optimization">particle swarm optimization</a>,<sup id="cite_ref-Kundra2010_9-1" class="reference"><a href="#cite_note-Kundra2010-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> <a href="Differential_evolution" title="Differential evolution">differential evolution</a>,<sup id="cite_ref-Bhattacharya2010_12-0" class="reference"><a href="#cite_note-Bhattacharya2010-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> <a href="Evolution_strategy" title="Evolution strategy">evolution strategy</a>,<sup id="cite_ref-Du2009_13-0" class="reference"><a href="#cite_note-Du2009-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20130301111839/http://tizhoosh.uwaterloo.ca/Research/opposition_based_learning.htm">opposition-based computing</a>,<sup id="cite_ref-Ergezer2009_14-0" class="reference"><a href="#cite_note-Ergezer2009-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> <a href="Case-based_reasoning" title="Case-based reasoning">case-based reasoning</a>,<sup id="cite_ref-Panchal2009_15-0" class="reference"><a href="#cite_note-Panchal2009-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> <a href="Artificial_bee_colony_algorithm" title="Artificial bee colony algorithm">artificial bee colony algorithm</a>, bacterial foraging optimization,<sup id="cite_ref-Lohokare2009_16-0" class="reference"><a href="#cite_note-Lohokare2009-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> <a href="Harmony_search" class="mw-redirect" title="Harmony search">harmony search</a>,<sup id="cite_ref-Wang2013_17-0" class="reference"><a href="#cite_note-Wang2013-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> and the <a href="Simplex_algorithm" title="Simplex algorithm">simplex algorithm</a>.<sup id="cite_ref-Wang2011_18-0" class="reference"><a href="#cite_note-Wang2011-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup></li>
<li>BBO can be combined with local search to create a <a href="Memetic_algorithm" title="Memetic algorithm">memetic algorithm</a> that performs much better than BBO alone.<sup id="cite_ref-Simon2013b_19-0" class="reference"><a href="#cite_note-Simon2013b-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Software">Software</h2></div>
<div class="mw-heading mw-heading3"><h3 id="MATLAB">MATLAB</h3></div>
<ul><li>The following MATLAB code gives a BBO implementation for minimizing the 20-dimensional <a href="Rosenbrock_function" title="Rosenbrock function">Rosenbrock function</a>. Note that the following code is very basic, although it does include elitism. A serious BBO implementation should include some of the variations discussed above, such as duplicate replacement, blending, nonlinear migration, and local optimization.</li></ul>
<div class="mw-highlight mw-highlight-lang-matlab mw-content-ltr" dir="ltr"><pre><span class="k">function</span><span class="w"> </span><span class="nf">BBO</span>
<span class="c">% Biogeography-based optimization (BBO) to minimize a continuous function</span>
<span class="c">% This program was tested with MATLAB R2012b</span>

<span class="n">GenerationLimit</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">50</span><span class="p">;</span><span class="w"> </span><span class="c">% generation count limit </span>
<span class="n">PopulationSize</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">50</span><span class="p">;</span><span class="w"> </span><span class="c">% population size</span>
<span class="n">ProblemDimension</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">20</span><span class="p">;</span><span class="w"> </span><span class="c">% number of variables in each solution (i.e., problem dimension)</span>
<span class="n">MutationProbability</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mf">0.04</span><span class="p">;</span><span class="w"> </span><span class="c">% mutation probability per solution per independent variable</span>
<span class="n">NumberOfElites</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span><span class="w"> </span><span class="c">% how many of the best solutions to keep from one generation to the next</span>
<span class="n">MinDomain</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="o">-</span><span class="mf">2.048</span><span class="p">;</span><span class="w"> </span><span class="c">% lower bound of each element of the function domain</span>
<span class="n">MaxDomain</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="o">+</span><span class="mf">2.048</span><span class="p">;</span><span class="w"> </span><span class="c">% upper bound of each element of the function domain</span>

<span class="c">% Initialize the population</span>
<span class="nb">rng</span><span class="p">(</span><span class="nb">round</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="mi">100</span><span class="o">*</span><span class="nb">clock</span><span class="p">)));</span><span class="w"> </span><span class="c">% initialize the random number generator</span>
<span class="n">x</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">zeros</span><span class="p">(</span><span class="n">PopulationSize</span><span class="p">,</span><span class="w"> </span><span class="n">ProblemDimension</span><span class="p">);</span><span class="w"> </span><span class="c">% allocate memory for the population</span>
<span class="k">for</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">PopulationSize</span><span class="w"> </span><span class="c">% randomly initialize the population</span>
<span class="w"> </span><span class="n">x</span><span class="p">(</span><span class="n">index</span><span class="p">,</span><span class="w"> </span><span class="p">:)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">MinDomain</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="p">(</span><span class="n">MaxDomain</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">MinDomain</span><span class="p">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="nb">rand</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">ProblemDimension</span><span class="p">);</span>
<span class="k">end</span>
<span class="n">Cost</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">RosenbrockCost</span><span class="p">(</span><span class="n">x</span><span class="p">);</span><span class="w"> </span><span class="c">% compute the cost of each individual </span>
<span class="p">[</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">Cost</span><span class="p">]</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">PopulationSort</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">Cost</span><span class="p">);</span><span class="w"> </span><span class="c">% sort the population from best to worst</span>
<span class="n">MinimumCost</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">zeros</span><span class="p">(</span><span class="n">GenerationLimit</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"> </span><span class="c">% allocate memory</span>
<span class="n">MinimumCost</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Cost</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span><span class="w"> </span><span class="c">% save the best cost at each generation in the MinimumCost array</span>
<span class="nb">disp</span><span class="p">([</span><span class="s">'Generation 0 min cost = '</span><span class="p">,</span><span class="w"> </span><span class="nb">num2str</span><span class="p">(</span><span class="n">MinimumCost</span><span class="p">(</span><span class="mi">1</span><span class="p">))]);</span>
<span class="n">z</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">zeros</span><span class="p">(</span><span class="n">PopulationSize</span><span class="p">,</span><span class="w"> </span><span class="n">ProblemDimension</span><span class="p">);</span><span class="w"> </span><span class="c">% allocate memory for the temporary population</span>

<span class="c">% Compute migration rates, assuming the population is sorted from most fit to least fit</span>
<span class="n">mu</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">(</span><span class="n">PopulationSize</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">:</span><span class="n">PopulationSize</span><span class="p">))</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="p">(</span><span class="n">PopulationSize</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"> </span><span class="c">% emigration rate</span>
<span class="n">lambda</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">mu</span><span class="p">;</span><span class="w"> </span><span class="c">% immigration rate</span>

<span class="k">for</span><span class="w"> </span><span class="n">Generation</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">GenerationLimit</span>
<span class="w"> </span><span class="c">% Save the best solutions and costs in the elite arrays</span>
<span class="w"> </span><span class="n">EliteSolutions</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">x</span><span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">NumberOfElites</span><span class="p">,</span><span class="w"> </span><span class="p">:);</span>
<span class="w"> </span><span class="n">EliteCosts</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Cost</span><span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">NumberOfElites</span><span class="p">);</span>

<span class="w"> </span><span class="c">% Use migration rates to decide how much information to share between solutions</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">PopulationSize</span>
<span class="w"> </span><span class="c">% Probabilistic migration to the k-th solution</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="nb">j</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">ProblemDimension</span>

<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nb">rand</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">lambda</span><span class="p">(</span><span class="n">k</span><span class="p">)</span><span class="w"> </span><span class="c">% Should we immigrate?</span>
<span class="w"> </span><span class="c">% Yes - Pick a solution from which to emigrate (roulette wheel selection)</span>
<span class="w"> </span><span class="n">RandomNum</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">rand</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="nb">sum</span><span class="p">(</span><span class="n">mu</span><span class="p">);</span>
<span class="w"> </span><span class="n">Select</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">mu</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="n">SelectIndex</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">RandomNum</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="n">Select</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="p">(</span><span class="n">SelectIndex</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">PopulationSize</span><span class="p">)</span>
<span class="w"> </span><span class="n">SelectIndex</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">SelectIndex</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="n">Select</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Select</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">mu</span><span class="p">(</span><span class="n">SelectIndex</span><span class="p">);</span>
<span class="w"> </span><span class="k">end</span>
<span class="w"> </span><span class="n">z</span><span class="p">(</span><span class="n">k</span><span class="p">,</span><span class="w"> </span><span class="nb">j</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">x</span><span class="p">(</span><span class="n">SelectIndex</span><span class="p">,</span><span class="w"> </span><span class="nb">j</span><span class="p">);</span><span class="w"> </span><span class="c">% this is the migration step</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="n">z</span><span class="p">(</span><span class="n">k</span><span class="p">,</span><span class="w"> </span><span class="nb">j</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">x</span><span class="p">(</span><span class="n">k</span><span class="p">,</span><span class="w"> </span><span class="nb">j</span><span class="p">);</span><span class="w"> </span><span class="c">% no migration for this independent variable</span>
<span class="w"> </span><span class="k">end</span>

<span class="w"> </span><span class="k">end</span>
<span class="w"> </span><span class="k">end</span>

<span class="w"> </span><span class="c">% Mutation</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">PopulationSize</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">ParameterIndex</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">ProblemDimension</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nb">rand</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">MutationProbability</span>
<span class="w"> </span><span class="n">z</span><span class="p">(</span><span class="n">k</span><span class="p">,</span><span class="w"> </span><span class="n">ParameterIndex</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">MinDomain</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="p">(</span><span class="n">MaxDomain</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">MinDomain</span><span class="p">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="nb">rand</span><span class="p">;</span>
<span class="w"> </span><span class="k">end</span>
<span class="w"> </span><span class="k">end</span>
<span class="w"> </span><span class="k">end</span>

<span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">z</span><span class="p">;</span><span class="w"> </span><span class="c">% replace the solutions with their new migrated and mutated versions</span>
<span class="w"> </span><span class="n">Cost</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">RosenbrockCost</span><span class="p">(</span><span class="n">x</span><span class="p">);</span><span class="w"> </span><span class="c">% calculate cost</span>
<span class="w"> </span><span class="p">[</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">Cost</span><span class="p">]</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">PopulationSort</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">Cost</span><span class="p">);</span><span class="w"> </span><span class="c">% sort the population and costs from best to worst</span>

<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">NumberOfElites</span><span class="w"> </span><span class="c">% replace the worst individuals with the previous generation's elites</span>
<span class="w"> </span><span class="n">x</span><span class="p">(</span><span class="n">PopulationSize</span><span class="o">-</span><span class="n">k</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="p">:)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">EliteSolutions</span><span class="p">(</span><span class="n">k</span><span class="p">,</span><span class="w"> </span><span class="p">:);</span>
<span class="w"> </span><span class="n">Cost</span><span class="p">(</span><span class="n">PopulationSize</span><span class="o">-</span><span class="n">k</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">EliteCosts</span><span class="p">(</span><span class="n">k</span><span class="p">);</span>
<span class="w"> </span><span class="k">end</span>

<span class="w"> </span><span class="p">[</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">Cost</span><span class="p">]</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">PopulationSort</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">Cost</span><span class="p">);</span><span class="w"> </span><span class="c">% sort the population and costs from best to worst</span>
<span class="w"> </span><span class="n">MinimumCost</span><span class="p">(</span><span class="n">Generation</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Cost</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="nb">disp</span><span class="p">([</span><span class="s">'Generation '</span><span class="p">,</span><span class="w"> </span><span class="nb">num2str</span><span class="p">(</span><span class="n">Generation</span><span class="p">),</span><span class="w"> </span><span class="s">' min cost = '</span><span class="p">,</span><span class="w"> </span><span class="nb">num2str</span><span class="p">(</span><span class="n">MinimumCost</span><span class="p">(</span><span class="n">Generation</span><span class="o">+</span><span class="mi">1</span><span class="p">))])</span>
<span class="k">end</span>

<span class="c">% Wrap it up by displaying the best solution and by plotting the results</span>
<span class="nb">disp</span><span class="p">([</span><span class="s">'Best solution found = '</span><span class="p">,</span><span class="w"> </span><span class="nb">num2str</span><span class="p">(</span><span class="n">x</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="p">:))])</span>
<span class="nb">close</span><span class="w"> </span><span class="nb">all</span>
<span class="nb">plot</span><span class="p">(</span><span class="mi">0</span><span class="p">:</span><span class="n">GenerationLimit</span><span class="p">,</span><span class="w"> </span><span class="n">MinimumCost</span><span class="p">);</span>
<span class="nb">xlabel</span><span class="p">(</span><span class="s">'Generation'</span><span class="p">)</span>
<span class="nb">ylabel</span><span class="p">(</span><span class="s">'Minimum Cost'</span><span class="p">)</span>
<span class="k">return</span>

<span class="c">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
<span class="k">function</span><span class="w"> </span><span class="nf">[x, Cost] = PopulationSort</span><span class="p">(</span>x, Cost<span class="p">)</span>
<span class="c">% Sort the population and costs from best to worst</span>
<span class="p">[</span><span class="n">Cost</span><span class="p">,</span><span class="w"> </span><span class="n">indices</span><span class="p">]</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">sort</span><span class="p">(</span><span class="n">Cost</span><span class="p">,</span><span class="w"> </span><span class="s">'ascend'</span><span class="p">);</span>
<span class="n">x</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">x</span><span class="p">(</span><span class="n">indices</span><span class="p">,</span><span class="w"> </span><span class="p">:);</span>
<span class="k">return</span>

<span class="c">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>
<span class="k">function</span><span class="w"> </span>[Cost]<span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nf">RosenbrockCost</span><span class="p">(</span>x<span class="p">)</span>
<span class="c">% Compute the Rosenbrock function value of each element in x</span>
<span class="n">NumberOfDimensions</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">size</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span>
<span class="n">Cost</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">zeros</span><span class="p">(</span><span class="nb">size</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">),</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span><span class="w"> </span><span class="c">% allocate memory for the Cost array</span>
<span class="k">for</span><span class="w"> </span><span class="n">PopulationIndex</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="nb">length</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="w"> </span><span class="n">Cost</span><span class="p">(</span><span class="n">PopulationIndex</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="nb">i</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">NumberOfDimensions</span><span class="o">-</span><span class="mi">1</span>
<span class="w"> </span><span class="n">Temp1</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">x</span><span class="p">(</span><span class="n">PopulationIndex</span><span class="p">,</span><span class="w"> </span><span class="nb">i</span><span class="p">);</span>
<span class="w"> </span><span class="n">Temp2</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">x</span><span class="p">(</span><span class="n">PopulationIndex</span><span class="p">,</span><span class="w"> </span><span class="nb">i</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="n">Cost</span><span class="p">(</span><span class="n">PopulationIndex</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Cost</span><span class="p">(</span><span class="n">PopulationIndex</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">100</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">Temp2</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">Temp1</span>^<span class="mi">2</span><span class="p">)</span>^<span class="mi">2</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="p">(</span><span class="n">Temp1</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span>^<span class="mi">2</span><span class="p">;</span>
<span class="w"> </span><span class="k">end</span>
<span class="k">end</span>
<span class="k">return</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="R">R</h3></div>
<ul><li>"bbo: Biogeography-Based Optimization" is an <a href="R_(programming_language)" title="R (programming language)">R</a> package for continuous BBO.<sup id="cite_ref-rPackage_20-0" class="reference"><a href="#cite_note-rPackage-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Extensions">Extensions</h2></div>
<p>BBO has been extended to noisy functions (that is, functions whose fitness evaluation is corrupted by noise);<sup id="cite_ref-Ma2013_21-0" class="reference"><a href="#cite_note-Ma2013-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup> constrained functions;<sup id="cite_ref-Roy2010a_22-0" class="reference"><a href="#cite_note-Roy2010a-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup> combinatorial functions;<sup id="cite_ref-Song2010_23-0" class="reference"><a href="#cite_note-Song2010-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup> and multi-objective functions.<sup id="cite_ref-Roy2010b_24-0" class="reference"><a href="#cite_note-Roy2010b-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-DiBarba2016_25-0" class="reference"><a href="#cite_note-DiBarba2016-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup>
Moreover, a micro biogeography-inspired multi-objective optimization algorithm (μBiMO) was implemented: it is suitable for solving multi-objective optimisations in the field of industrial design because it is based on a small number of islands (hence the name μBiMO), i.e. few objective function calls are required.<sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Mathematical_analyses">Mathematical analyses</h2></div>
<p>BBO has been mathematically analyzed using Markov models<sup id="cite_ref-Simon2011b_27-0" class="reference"><a href="#cite_note-Simon2011b-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup> and dynamic system models.<sup id="cite_ref-Simon2011c_28-0" class="reference"><a href="#cite_note-Simon2011c-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Applications">Applications</h2></div>
<p>Scholars have applied BBO into various academic and industrial applications. They found BBO performed better than state-of-the-art global optimization methods.
</p><p>For example, Wang et al. proved BBO performed equal performance with FSCABC but with simpler codes.<sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup>
</p><p>Yang et al. showed BBO was superior to GA, PSO, and ABC.<sup id="cite_ref-30" class="reference"><a href="#cite_note-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap mw-references-columns"><ol class="references">
<li id="cite_note-Quammen1997-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-Quammen1997_1-0">^</a></b></span> <span class="reference-text">
<style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFQuammen1997" class="citation book cs1">Quammen, D. (1997). <i>The Song of the Dodo: Island Biogeography in an Age of Extinction</i>. Scribner.</cite></span>
</li>
<li id="cite_note-Simon2008-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-Simon2008_2-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFSimon2008" class="citation journal cs1">Simon, D. (2008). <a rel="nofollow" class="external text" href="http://academic.csuohio.edu/simond/bbo/BBO_Simon.pdf">"Biogeography-based optimization"</a> <span class="cs1-format">(PDF)</span>. <i>IEEE Transactions on Evolutionary Computation</i>. <b>12</b> (6): <span class="nowrap">702–</span>713. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2Ftevc.2008.919004">10.1109/tevc.2008.919004</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a>&nbsp;<a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:8319014">8319014</a>.</cite></span>
</li>
<li id="cite_note-MacArthur1967-3"><span class="mw-cite-backlink">^ <a href="#cite_ref-MacArthur1967_3-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-MacArthur1967_3-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text">
<cite id="CITEREFMacArthurWilson1967" class="citation book cs1">MacArthur, R.; Wilson, E. (1967). <i>The Theory of Island Biogeography</i>. Princeton University Press.</cite></span>
</li>
<li id="cite_note-Wesche1987-4"><span class="mw-cite-backlink">^ <a href="#cite_ref-Wesche1987_4-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Wesche1987_4-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text">
<cite id="CITEREFWescheGoertlerHubert1987" class="citation journal cs1">Wesche, T.; Goertler, G.; Hubert, W. (1987). "Modified habitat suitability index model for brown trout in southeastern Wyoming". <i>North American Journal of Fisheries Management</i>. <b>7</b> (2): <span class="nowrap">232–</span>237. <a href="Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/1987NAJFM...7..232W">1987NAJFM...7..232W</a>. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1577%2F1548-8659%281987%297%3C232%3Amhsimf%3E2.0.co%3B2">10.1577/1548-8659(1987)7&lt;232:mhsimf&gt;2.0.co;2</a>.</cite></span>
</li>
<li id="cite_note-DeJong1975-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-DeJong1975_5-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFDe_Jong1975" class="citation thesis cs1">De Jong, K. (1975). <i>An Analysis of the Behaviour of a Class of Genetic Adaptive Systems</i> (Ph.D.). University of Michigan.</cite></span>
</li>
<li id="cite_note-Muhlenbein1993-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-Muhlenbein1993_6-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFMuhlenbeinSchlierkamp-Voosen1993" class="citation journal cs1">Muhlenbein, H.; Schlierkamp-Voosen, D. (1993). "Predictive models for the breeder genetic algorithm: I. Continuous parameter optimization". <i>Evolutionary Computation</i>. <b>1</b> (1): <span class="nowrap">25–</span>49. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1162%2Fevco.1993.1.1.25">10.1162/evco.1993.1.1.25</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a>&nbsp;<a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:16085506">16085506</a>.</cite></span>
</li>
<li id="cite_note-Ma2011b-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-Ma2011b_7-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFMaSimon2011" class="citation journal cs1">Ma, H.; Simon, D. (2011). <a rel="nofollow" class="external text" href="http://embeddedlab.csuohio.edu/BBO/BBO_Papers/MaSimonEAAI2011.pdf">"Blended biogeography-based optimization for constrained optimization"</a> <span class="cs1-format">(PDF)</span>. <i>Engineering Applications of Artificial Intelligence</i>. <b>24</b> (3): <span class="nowrap">517–</span>525. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.engappai.2010.08.005">10.1016/j.engappai.2010.08.005</a>.</cite></span>
</li>
<li id="cite_note-Simon2013-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-Simon2013_8-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFSimon2013" class="citation book cs1">Simon, D. (2013). <a rel="nofollow" class="external text" href="http://academic.csuohio.edu/simond/EvolutionaryOptimization/"><i>Evolutionary Optimization Algorithms</i></a>. Wiley.</cite></span>
</li>
<li id="cite_note-Kundra2010-9"><span class="mw-cite-backlink">^ <a href="#cite_ref-Kundra2010_9-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Kundra2010_9-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text">
<cite id="CITEREFKundraSood2010" class="citation journal cs1">Kundra, H.; Sood, M. (2010). <a rel="nofollow" class="external text" href="http://embeddedlab.csuohio.edu/BBO/BBO_Papers/Kundra2010.pdf">"Cross-Country Path Finding using Hybrid approach of PSO and BBO"</a> <span class="cs1-format">(PDF)</span>. <i>International Journal of Computer Applications</i>. <b>7</b> (6): <span class="nowrap">15–</span>19. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.5120%2F1167-1370">10.5120/1167-1370</a></span>.</cite></span>
</li>
<li id="cite_note-Ma2010-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-Ma2010_10-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFMa2010" class="citation journal cs1">Ma, H. (2010). <a rel="nofollow" class="external text" href="http://embeddedlab.csuohio.edu/BBO/BBO_Papers/HaipingMa2.pdf">"An analysis of the equilibrium of migration models for biogeography-based optimization"</a> <span class="cs1-format">(PDF)</span>. <i>Information Sciences</i>. <b>180</b> (18): <span class="nowrap">3444–</span>3464. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.ins.2010.05.035">10.1016/j.ins.2010.05.035</a>.</cite></span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><cite id="CITEREFZhang2015" class="citation journal cs1">Zhang, Y. (2015). <a rel="nofollow" class="external text" href="http://www.jpier.org/PIER/pier152/04.15040602.pdf">"Pathological Brain Detection in Magnetic Resonance Imaging Scanning by Wavelet Entropy and Hybridization of Biogeography-based Optimization and Particle Swarm Optimization"</a> <span class="cs1-format">(PDF)</span>. <i>Progress in Electromagnetics Research</i>. <b>152</b>: <span class="nowrap">41–</span>58. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.2528%2Fpier15040602">10.2528/pier15040602</a></span>.</cite></span>
</li>
<li id="cite_note-Bhattacharya2010-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-Bhattacharya2010_12-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFBhattacharyaChattopadhyay2010" class="citation journal cs1">Bhattacharya, A.; Chattopadhyay, P. (2010). "Hybrid differential evolution with biogeography-based optimization for solution of economic load dispatch". <i>IEEE Transactions on Power Systems</i>. <b>25</b> (4): <span class="nowrap">1955–</span>1964. <a href="Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2010ITPSy..25.1955B">2010ITPSy..25.1955B</a>. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2Ftpwrs.2010.2043270">10.1109/tpwrs.2010.2043270</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a>&nbsp;<a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:30052218">30052218</a>.</cite></span>
</li>
<li id="cite_note-Du2009-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-Du2009_13-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFDuSimonErgezer2009" class="citation conference cs1">Du, D.; Simon, D.; Ergezer, M. (2009). <a rel="nofollow" class="external text" href="http://embeddedlab.csuohio.edu/BBO/BBO_Papers/mbbo.pdf">"Biogeography-based optimization combined with evolutionary strategy and immigration refusal"</a> <span class="cs1-format">(PDF)</span>. <i>IEEE Conference on Systems, Man, and Cybernetics</i>. San Antonio, Texas. pp.&nbsp;<span class="nowrap">1023–</span>1028.</cite></span>
</li>
<li id="cite_note-Ergezer2009-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-Ergezer2009_14-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFErgezerSimonDu2009" class="citation conference cs1">Ergezer, M.; Simon, D.; Du, D. (2009). <a rel="nofollow" class="external text" href="http://embeddedlab.csuohio.edu/BBO/BBO_Papers/OBBO_SMC.pdf">"Oppositional biogeography-based optimization"</a> <span class="cs1-format">(PDF)</span>. <i>IEEE Conference on Systems, Man, and Cybernetics</i>. San Antonio, Texas. pp.&nbsp;<span class="nowrap">1035–</span>1040.</cite></span>
</li>
<li id="cite_note-Panchal2009-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-Panchal2009_15-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFKundraKaurPanchal2009" class="citation journal cs1">Kundra, H.; Kaur, A.; Panchal, V. (2009). <a rel="nofollow" class="external text" href="http://embeddedlab.csuohio.edu/BBO/BBO_Papers/Kundra.pdf">"An integrated approach to biogeography based optimization with case-based reasoning for exploring groundwater possibility"</a> <span class="cs1-format">(PDF)</span>. <i>The Delving: Journal of Technology and Engineering Sciences</i>. <b>1</b> (1): <span class="nowrap">32–</span>38.</cite></span>
</li>
<li id="cite_note-Lohokare2009-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-Lohokare2009_16-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFLohokarePattnaikDeviPanigrahi2009" class="citation conference cs1">Lohokare, M.; Pattnaik, S.; Devi, S.; Panigrahi, B.; Das, S.; Bakwad, K. (2009). "Intelligent biogeography-based optimization for discrete variables". <i>World Congress on Nature and Biologically Inspired Computing</i>. Coimbatore, India. pp.&nbsp;<span class="nowrap">1088–</span>1093. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FNABIC.2009.5393808">10.1109/NABIC.2009.5393808</a>.</cite></span>
</li>
<li id="cite_note-Wang2013-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-Wang2013_17-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFWangGuoDuanWang2013" class="citation journal cs1">Wang, G.; Guo, L.; Duan, H.; Wang, H.; Liu, L.; Shao, M. (2013). "Hybridizing harmony search with biogeography based optimization for global numerical optimization". <i>Journal of Computational and Theoretical Nanoscience</i>. <b>10</b> (10): <span class="nowrap">2312–</span>2322. <a href="Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2013JCTN...10.2312W">2013JCTN...10.2312W</a>. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1166%2Fjctn.2013.3207">10.1166/jctn.2013.3207</a>.</cite></span>
</li>
<li id="cite_note-Wang2011-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-Wang2011_18-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFWangXu2011" class="citation journal cs1">Wang, L.; Xu, Y. (2011). "An effective hybrid biogeography-based optimization algorithm for parameter estimation of chaotic systems". <i>Expert Systems with Applications</i>. <b>38</b> (12): <span class="nowrap">15103–</span>15109. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.eswa.2011.05.011">10.1016/j.eswa.2011.05.011</a>.</cite></span>
</li>
<li id="cite_note-Simon2013b-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-Simon2013b_19-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFSimonOmranClerc" class="citation web cs1">Simon, D.; Omran, M.; Clerc, M. <a rel="nofollow" class="external text" href="http://academic.csuohio.edu/simond/bbo/linearized/">"Linearized Biogeography-Based Optimization with Re-initialization and Local Search"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">6 September</span> 2013</span>.</cite></span>
</li>
<li id="cite_note-rPackage-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-rPackage_20-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://cran.r-project.org/web/packages/bbo/">"Bbo: Biogeography-Based Optimization"</a>. 2014-09-18.</cite></span>
</li>
<li id="cite_note-Ma2013-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-Ma2013_21-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFMaFeiSimonYu" class="citation web cs1">Ma, H.; Fei, M.; Simon, D.; Yu, M. <a rel="nofollow" class="external text" href="http://academic.csuohio.edu/simond/bbo/noisy/">"Biogeography-Based Optimization for Noisy Fitness Functions"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">7 September</span> 2013</span>.</cite></span>
</li>
<li id="cite_note-Roy2010a-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-Roy2010a_22-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFRoyGhoshalThakur2010" class="citation journal cs1">Roy, P.; Ghoshal, S.; Thakur, S. (2010). "Biogeography based optimization for multi-constraint optimal power flow with emission and non-smooth cost function". <i>Expert Systems with Applications</i>. <b>37</b> (12): <span class="nowrap">8221–</span>8228. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.eswa.2010.05.064">10.1016/j.eswa.2010.05.064</a>.</cite></span>
</li>
<li id="cite_note-Song2010-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-Song2010_23-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFSongLiuWang2010" class="citation conference cs1">Song, Y.; Liu, M.; Wang, Z. (2010). "Biogeography-based optimization for the traveling salesman problems". <i>International Joint Conference on Computational Science and Optimization</i>. Huangshan, Anhui, China. pp.&nbsp;<span class="nowrap">295–</span>299.</cite></span>
</li>
<li id="cite_note-Roy2010b-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-Roy2010b_24-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFRoyGhoshalThakur2010" class="citation journal cs1">Roy, P.; Ghoshal, S.; Thakur, S. (2010). "Multi-objective optimal power flow using biogeography-based optimization". <i>Electric Power Components and Systems</i>. <b>38</b> (12): <span class="nowrap">1406–</span>1426. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1080%2F15325001003735176">10.1080/15325001003735176</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a>&nbsp;<a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:109069222">109069222</a>.</cite></span>
</li>
<li id="cite_note-DiBarba2016-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-DiBarba2016_25-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFDi_BarbaDughieroMognaschiSavini2016" class="citation journal cs1">Di Barba, P.; Dughiero, F.; Mognaschi, M.E.; Savini, A.; Wiak, S. (2016). "Biogeography-Inspired Multiobjective Optimization and MEMS Design". <i>IEEE Transactions on Magnetics</i>. <b>52</b> (3): <span class="nowrap">1–</span>4. <a href="Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2016ITM....5288982D">2016ITM....5288982D</a>. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FTMAG.2015.2488982">10.1109/TMAG.2015.2488982</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a>&nbsp;<a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:17355264">17355264</a>.</cite></span>
</li>
<li id="cite_note-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-26">^</a></b></span> <span class="reference-text"><cite id="CITEREFMognaschi2017" class="citation journal cs1">Mognaschi, M.E. (2017). "Micro biogeography-inspired multi-objective optimisation for industrial electromagnetic design". <i>Electronics Letters</i>. <b>53</b> (22): <span class="nowrap">1458–</span>1460. <a href="Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2017ElL....53.1458M">2017ElL....53.1458M</a>. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1049%2Fel.2017.3072">10.1049/el.2017.3072</a>.</cite></span>
</li>
<li id="cite_note-Simon2011b-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-Simon2011b_27-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFSimonErgezerDuRarick2011" class="citation journal cs1">Simon, D.; Ergezer, M.; Du, D.; Rarick, R. (2011). <a rel="nofollow" class="external text" href="http://embeddedlab.csuohio.edu/BBO/BBO_Papers/Markov9.pdf">"Markov models for biogeography-based optimization"</a> <span class="cs1-format">(PDF)</span>. <i>IEEE Transactions on Systems, Man, and Cybernetics - Part B: Cybernetics</i>. <b>41</b> (1): <span class="nowrap">299–</span>306. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2Ftsmcb.2010.2051149">10.1109/tsmcb.2010.2051149</a>. <a href="PMID_(identifier)" class="mw-redirect" title="PMID (identifier)">PMID</a>&nbsp;<a rel="nofollow" class="external text" href="https://pubmed.ncbi.nlm.nih.gov/20595090">20595090</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a>&nbsp;<a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:11852624">11852624</a>.</cite></span>
</li>
<li id="cite_note-Simon2011c-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-Simon2011c_28-0">^</a></b></span> <span class="reference-text">
<cite id="CITEREFSimon2011" class="citation journal cs1">Simon, D. (2011). <a rel="nofollow" class="external text" href="http://embeddedlab.csuohio.edu/BBO/BBO_Papers/BBODyn.pdf">"A dynamic system model of biogeography-based optimization"</a> <span class="cs1-format">(PDF)</span>. <i>Applied Soft Computing</i>. <b>1</b> (8): <span class="nowrap">5652–</span>5661. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.asoc.2011.03.028">10.1016/j.asoc.2011.03.028</a>.</cite></span>
</li>
<li id="cite_note-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-29">^</a></b></span> <span class="reference-text"><cite id="CITEREFWang2015" class="citation journal cs1">Wang, S. (2015). <a rel="nofollow" class="external text" href="https://doi.org/10.3390%2Fe17085711">"Fruit Classification by Wavelet-Entropy and Feedforward Neural Network trained by Fitness-scaled Chaotic ABC and Biogeography-based Optimization"</a>. <i>Entropy</i>. <b>17</b> (8): <span class="nowrap">5711–</span>5728. <a href="Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2015Entrp..17.5711W">2015Entrp..17.5711W</a>. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.3390%2Fe17085711">10.3390/e17085711</a></span>.</cite></span>
</li>
<li id="cite_note-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-30">^</a></b></span> <span class="reference-text"><cite id="CITEREFYangYang2015" class="citation journal cs1">Yang, G.; Yang, J. (2015). "Automated classification of brain images using wavelet-energy and biogeography-based optimization". <i>Multimedia Tools and Applications</i>. <b>75</b> (23): <span class="nowrap">15601–</span>15617. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2Fs11042-015-2649-7">10.1007/s11042-015-2649-7</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a>&nbsp;<a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:254825916">254825916</a>.</cite></span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20160403182447/http://embeddedlab.csuohio.edu/BBO/">BBO Home Page</a></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}


/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}


/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Major_subfields_of_optimization78" style="padding:3px"><table class="nowraplinks mw-collapsible mw-collapsed navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */


.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div id="Major_subfields_of_optimization78" style="font-size:114%;margin:0 4em"><a href="Optimization_(mathematics)" class="mw-redirect" title="Optimization (mathematics)">Major subfields of optimization</a></div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Convex_programming" class="mw-redirect" title="Convex programming">Convex programming</a></li>
<li><a href="Fractional_programming" title="Fractional programming">Fractional programming</a></li>
<li><a href="Integer_programming" title="Integer programming">Integer programming</a></li>
<li><a href="Quadratic_programming" title="Quadratic programming">Quadratic programming</a></li>
<li><a href="Nonlinear_programming" title="Nonlinear programming">Nonlinear programming</a></li>
<li><a href="Stochastic_programming" title="Stochastic programming">Stochastic programming</a></li>
<li><a href="Robust_optimization" title="Robust optimization">Robust optimization</a></li>
<li><a href="Combinatorial_optimization" title="Combinatorial optimization">Combinatorial optimization</a></li>
<li><a href="Infinite-dimensional_optimization" title="Infinite-dimensional optimization">Infinite-dimensional optimization</a></li>
<li><a href="Metaheuristic" title="Metaheuristic">Metaheuristics</a></li>
<li><a href="Constraint_satisfaction" title="Constraint satisfaction">Constraint satisfaction</a></li>
<li><a href="Multiobjective_optimization" class="mw-redirect" title="Multiobjective optimization">Multiobjective optimization</a></li>
<li><a href="Simulated_annealing" title="Simulated annealing">Simulated annealing</a></li></ul>
</div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-04-16" href="https://en.wikipedia.org/wiki/?title=Biogeography-based_optimization&amp;oldid=1285913813">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>